<?php
/**
 * @author: Gardennet
 * @date: 18-07-24
 * @email: lwp8800@sina.com
 */

namespace App\Services\Payment;


use App\Facades\PaymentConfigFacades;
use App\Helpers\SnHelper;

abstract class AbstractPayment implements PaymentInterface
{
    protected $zhongxin_paymentService;
    protected $wechat_paymentService;
    public function __construct(){
        $this->zhongxin_paymentService = PaymentConfigFacades::getPaymentObject('zhongxinPay');
        $this->wechat_paymentService = PaymentConfigFacades::getPaymentObject('wechatPay');
    }

    /**
     * 微信支付类型 0微信原生 1平安支付 2民生支付 3中信支付
     */
    const WECHATTYPE_WECHAT = 0;
    const WECHATTYPE_PINGAN = 1;
    const WECHATTYPE_MINSHENG = 2;
    const WECHATTYPE_ZHONGXIN = 3;

    /**
     * 微信支付方式 1现金支付 2微信子商户支付 3余额支付
     */
    const PAY_CASH = 1;
    const PAY_SUB_CASH = 2;
    const PAY_BALANCE= 2;

    /**
     * 支付方式
     */
    const PAY_TYPE = [
        self::PAY_CASH => '微信支付',
        self::PAY_SUB_CASH => '微信支付'
    ];

    /**
     * 支付时间日志
     *
     * $type              类型 wechat微信原生 minsheng民生 zhongxin中信 balance余额
     * $start_time        开始时间
     * $end_time          结束时间
     * $order             参数
     *
     */
    public function payTimeNote($type,$start_time,$end_time,$order)
    {
        switch ($type){
            case 'wechat':
                SnHelper::logFun('微信支付请求日志','微信支付请求发起时间:'.$start_time.' || '.'微信支付请求响应时间:'.$end_time.' || '.'微信支付请求时间差:'.($end_time - $start_time).' || '.'流水号:'.$order['out_trade_no']);
                break;
            case 'zhongxin':
                SnHelper::logFun('中信微信支付请求日志','中信微信支付请求发起时间:'.$start_time.' || '.'中信微信支付请求响应时间:'.$end_time.' || '.'中信微信支付请求时间差:'.($end_time - $start_time).' || '.'流水号:'.$order['out_trade_no']);
                break;
            case 'balance':
                SnHelper::logFun('余额支付请求日志','余额支付请求发起时间:'.$start_time.' || '.'余额支付请求响应时间:'.$end_time.' || '.'余额支付请求时间差:'.($end_time - $start_time).' || '.'流水号:'.$order['out_trade_no']);
                break;
                break;
            default:
                SnHelper::logFun('支付流程请求日志','支付流程发起时间:'.$start_time.' || '.'支付流程响应时间:'.$end_time.' || '.'支付流程时间差:'.($end_time - $start_time).' || '.'流水号:'.$order['out_trade_no']);
        }
        unset($start_time);
        unset($end_time);
    }

    /**
     * 企业付款到零钱
     * @param array $order
     * @return array
     */
    public function changePay($order=[])
    {
        $pay = $this->wechat_paymentService->changePay($order);
        return $pay;
    }

    /**
     * 中信支付状态查询接口
     * @param array $order
     * @return array
     */
    public function zhongXinCheckPay($order)
    {
        $pay = $this->zhongxin_paymentService->zhongXinCheckPay($order);
        return $pay;
    }

    /**
     * 中信退款状态查询接口
     * @param array $order
     * @return array
     */
    public function zhongXinCheckRefund($order)
    {
        $pay = $this->zhongxin_paymentService->zhongXinCheckRefund($order);
        return $pay;
    }

    /**
     * 中信关闭订单接口
     * @param array $order
     * @return array
     */
    public function zhongXinCloseOrder($order)
    {
        $pay = $this->zhongxin_paymentService->zhongXinCloseOrder($order);
        return $pay;
    }

    /**
     * 中信对账单下载接口
     * @param array $order
     * @return array
     */
    public function zhongXinPayBill($order=[])
    {
        $pay = $this->zhongxin_paymentService->zhongXinPayBill($order);
        return $pay;
    }

}